package Logica_Moviemientos;

import Mapa.*;
import Personajes.*;
public class Inteligencia_Manual extends Inteligencia{
	protected Actualizador actualizadorMapa;
	protected Mario p;
	
	/**Constructor. */
	public Inteligencia_Manual(Mapa map, Mario mar, Actualizador a){
		super(map);
		p = mar;
		actualizadorMapa = a;
		a.start();
		mapa.setGravedad(true);
	}
	
	/**Mueve el personaje logico y grafico hacia la izquierda. */
	public void moverIzquierda(){
		actualizadorMapa.setMover(false);
		if(!mapa.colisionAIzquierda(p) && mapa.colisionAbajo(p)){
			if(p.getX() > 0){
				p.setLocation(p.getX() - 4, p.getY());
				p.setPosicion(p.obtenerX() - 4, p.obtenerY());
			}
		}
	}
	
	/**Mueve el personaje logico y grafico hacia la derecha. */
	public void moverDerecha(){
		if(!mapa.colisionADerecha(p)&& mapa.colisionAbajo(p)){
			if(p.getX() < 400){
				p.setLocation(p.getX() + 4, p.getY());
				p.setPosicion(p.obtenerX() + 4, p.obtenerY());
			}
			else{
			    actualizadorMapa.setMover(true);
			}
		}
	}
	
	
	/**Activa el hilo de salto y hace saltar al personaje. */
	public void saltar(){
		actualizadorMapa.setMover(false);
		mapa.setGravedad(false);
		if(mapa.colisionAbajo(p)){
			//Subiendo
			for( int i = 0; i < 16; i++){
				try	{
					//Si no hay obstaculo el personaje puede subir
					if(!mapa.colisionArriba(p)){
						if(p.getDerecha()){
							if(!mapa.colisionADerecha(p)){
								p.setLocation(p.getX() + 4, p.getY() - 8);
								p.setPosicion(p.obtenerX() + 4, p.obtenerY() - 8);
							}else break;
						}
						else if(p.getIzquierda()){
							if(!mapa.colisionAIzquierda(p)){
								if(p.getX() > 0){
									p.setLocation(p.getX() - 4, p.getY() - 8);
									p.setPosicion(p.obtenerX() - 4, p.obtenerY() - 8);
								}
							}
							else break;
						}	
						else{
							p.setLocation(p.getX(), p.getY() - 8);
							p.setPosicion(p.obtenerX(), p.obtenerY() - 8);
						}
						Thread.sleep(20);
					}
				} catch (Exception e) {
					System.out.println("Salto :: Run() "+e);
				}
			}
			//Bajando
			for( int i = 0; i < 16; i++){
				try	{
					//Si no hay obstaculo el personaje puede subir
					if(!mapa.colisionAbajo(p)){
						if(p.getDerecha()){
							if(!mapa.colisionADerecha(p)){
								p.setLocation(p.getX() + 4, p.getY() + 8);
								p.setPosicion(p.obtenerX() + 4, p.obtenerY() + 8);
							}else break;
						}
						else if(p.getIzquierda()){
							if(!mapa.colisionAIzquierda(p)){
								if(p.getX() > 0){
									p.setLocation(p.getX() - 4, p.getY() + 8);
									p.setPosicion(p.obtenerX() - 4, p.obtenerY() + 8);
								}
							}
							else break;
						}	
						else{
							p.setLocation(p.getX(), p.getY() + 8);
							p.setPosicion(p.obtenerX(), p.obtenerY() + 8);
						}
						Thread.sleep(20);
					}
				} catch (Exception e) {
					System.out.println("Salto :: Run() "+e);
				}
			}
		}
		mapa.setGravedad(true);
	}
	
	public void nada(){
		actualizadorMapa.setMover(false);
	}
	
}
